// Controller.h
#pragma once
#include "Model.h"
#include "View.h"
#include "View2D.h"
#include "View3D.h"
#include "View3DOrtho.h"
#include "View3DPerspective.h"

#define TEMPSFLECHES 200	// Temps pendant une flèche reste en surbrillance
// Le C de MVC
class Controller {
private:
	/*attributs*/

	static Controller *instance; // Instance du controlleur pour le pattern singleton
	Model *model; // Le M de MVC
	View *view; // Le V de MVC
	int nbrTimerSuperMode; //attributs permettant de savoir combien de timer il y a pour la fonction callBack du SuperMode
	float previousCadence;
	/*méthodes*/
	Controller();
	void handleGhostsMouvements();
	void handleLeftAction();
	void handleRightAction();
	void handleUpAction();
	void handleDownAction();
	void mouseBottom(float x, float y, int*); // Appellée lors d'actions à la souris pour la viewport du bas
	void mouseMiddle(float x, float y, int*); // Appellée lors d'actions à la souris pour la viewport du milieu
	void StartCounter();
	double GetCounter();
public:

	void special(int key, int x, int y); // Appellée lors d'actions via touches du clavier étendu
	void animateDisplay(); // Gestion de l'animation
	void highLightFleches(int); // Gestion de la surbrilliance des flèches
	void stopSuperMode(); // arrête le super-mode
	void stopJailTime(int); // arrête le temps d'emprisonnement d'une voiture (ghost)
	int getRandomInc();
	void setView(View* view);
	View* getView(); //renvoie la vue utilisé actuellment(utile pour le main).
	void handlePicking(int button, int state, int x, int y); //gère la selection souris in dispatchant pour les viewport adéquates
	static Controller *getInstance(); // Singleton
};

